import router from './router'
import store from '@/store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// 白名单页面
const whiteList = ['/login', '/404']

// 前置守卫
router.beforeEach(async(to, from, next) => {
  NProgress.start() // 页面加载效果
  // 根据token进行路由跳转
  if (store.getters.token) {
    // 存在token
    if (to.path === '/login') {
      // 如果在拥有token的情况下访问login页则直接跳转到主页
      next('/')
    } else {
      // 其他页面则判断当前是否有用户资料，有则跳过，没有则进行获取，通过是否存在userId进行判断
      if (!store.getters.userId) {
        // 没有用户资料调用 ；异步函数这里需要改为同步函数
        const { roles } = await store.dispatch('user/getUserInfo')
        // 获取用户拥有的权限及可访问页面
        const routes = await store.dispatch('permission/filterRoutes', roles.menus)
        // 将获取到的动态路由添加到路由中
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        // bug 在进行路由添加后需要使用 next(to.path) 多做一次跳转
        next(to.path)
      } else { next() }
    }
  } else {
    // 没有token则判断访问路由是否存在白名单中
    if (whiteList.indexOf(to.path) > -1) {
      next()
    } else {
      // 访问的不是白名单页面则跳转至登陆页
      next('/login')
    }
  }
  NProgress.done() // 解决手动跳转不触发关闭效果
})

// 后置守卫
router.afterEach(() => {
  NProgress.done()
})
